const fs = require('fs');
const config = require('./config.js');
const fileSizeArr = {};
const fileNameArr = [];
// 是否跳过目录
const noCompareDocuments = false;

// 可以被多次调用，比如 D 盘文件被分散存储在I、K两个备份盘符，那么就可以多次调用添加多个备份盘符，第二个参数传 true
// 一定要先传备份盘符，都传完后，也就把备份盘符的文件都记录到 fileSizeArr 了，然后再依次调用 test 传主数据盘符挨个对比，第二个参数传false
// 就可以把 D 盘增加的文件，不存在于两个备份盘符的文件给找出来
test('K:\\', true)('I:\\', true)('D:\\', false);
// 可以把打印结果直接复制到 Everything 中正则搜索
console.log(fileNameArr.length);
fs.writeFileSync('./result.txt', fileNameArr.join('|'));

function test(dir, flag){
  for (let video of fs.readdirSync(dir)) {

    if (config.skipDirectory.includes(video)) continue;

    const stat = fs.lstatSync(`${dir}${video}`);

    if (stat.isDirectory()) {
      if (noCompareDocuments) continue;
      test(`${dir}${video}\\`, flag);
    };

    const videoNameArr = video.split('.');
    // suffix = [ '视频1', 'mp4' ] 取最后一个元素，判断是不是视频类型
    const suffix = videoNameArr[videoNameArr.length - 1] .toLocaleLowerCase();
    if (!config.videoType.includes(suffix)) continue;

    // 如果是备份盘符，则文件字节数 + 文件名做key，路径做value；
    // 如果不是备份盘符，则判断该文件是否存在于备份盘符，不存在则打印
    if (flag) {
      fileSizeArr[`${stat.size}${video}`] = `${dir}${video}`;
    } else {
      if (!fileSizeArr[`${stat.size}${video}`]) {
        // console.log(`${dir}${video}  ${stat.size}`);
        fileNameArr.push(`\\b${video}`.replace(/\(/g, '\\(').replace(/\-/g, '\\-').replace(/\)/g, '\\)').replace(/\./g, '\\.'))
      }
    };
  };
  return test
}